const { Op } = require("sequelize");
const { ServiceError } = require("../../../utils/error");
const { Role, UserRole } = require("../../../models");

module.exports = {
  // 通过userId更新用户/角色关系表
  async updateUserRoleByUserId({ userId, roleIds }, transaction) {
    // 1、删除所有userId对应的roleId
    await UserRole.destroy({
      where: {
        userId,
      },
      transaction,
    });

    // 2、重新插入新的对应关系
    const userRoleList =
      roleIds?.map((roleId) => {
        return {
          userId,
          roleId,
        };
      }) ?? [];
    await UserRole.bulkCreate(userRoleList, { transaction });
  },

  // 检查上传的角色数据是否合规
  async checkRoleIds(roleIds) {
    // 1 判断是否选择角色
    if (!roleIds || !roleIds.length) {
      throw new Error("请选择角色");
    }
    // 2 判断是否有重复项
    if (new Set(roleIds).size !== roleIds.length) {
      throw new Error("所选角色有重复项");
    }

    // 3 判断传递的roleIds是否合法 （是否在角色数据库中存在）
    const roleList = await Role.findAll({
      where: {
        id: {
          [Op.in]: roleIds,
        },
      },
    });
    if (roleList.length !== roleIds.length) {
      throw new Error("请选择合法的角色");
    }
  },
};
